
/**
 * @description 防抖函数
 * @param {function} func 待执行函数
 * @param {number} delay 延迟时间（毫秒）
 * @param {boolean} immediate 是否立即执行
 * @returns {function} 
 * @example
 // 示例用法
function handleInput() {
  console.log('输入已稳定...');
}
 const debouncedInputHandler = debounce(handleInput, 500);
// 添加事件监听器
document.getElementById('inputElement').addEventListener('input', debouncedInputHandler);
 */
export function debounce(func, delay, immediate = false) {
	let timeoutId;

	return function (...args) {
		const context = this;

		// 清除之前的定时器
		clearTimeout(timeoutId);

		if (immediate && !timeoutId) {
			// 如果是立即执行模式且没有定时器，立即执行一次函数
			func.apply(context, args);
		}

		// 创建一个新的定时器
		timeoutId = setTimeout(() => {
			if (!immediate) {
				func.apply(context, args);
			}
			timeoutId = null; // 清除定时器标记
		}, delay);
	};
}